Alteryxで複数のKEYがあるデータをIDごとに1行にまとめる
こんにちは、スズです。
今回は、Alteryxで複数のKEYがあるデータをIDごとに1行にまとめる、というワークフローをご紹介します。
例えば、以下のデータのように、1つのIDに対して複数のKEYがある縦持ちのデータがあります。
ID | KEY | VALUE |
---|---|---|
1 | A | 100 |
1 | B | 300 |
2 | C | 500 |
2 | D | 200 |
2 | E | 300 |
3 | F | 400 |
3 | G | 200 |
3 | H | 400 |
このデータを以下のように、KEYはKEY1、KEY2というように列にし、1つのIDごとにデータを1行にまとめます。データがない場合はNullにします。
ID | KEY1 | VALUE1 | KEY2 | VALUE2 | KEY3 | VALUE3 |
---|---|---|---|---|---|---|
1 | A | 100 | B | 300 | Null | Null |
2 | C | 500 | D | 200 | E | 300 |
3 | F | 400 | G | 200 | H | 400 |
ワークフロー概要
ワークフローの全体像は以下の通りです。
処理の概要は以下の通りです。
- KEYとVALUEの列名の作成
- KEYとVALUEのデータの変換
- Nullの変換
ワークフロー詳細
テキスト入力ツールで以下のデータを用意しました。
まずはKEYとVALUEの列名を作成していきます。複数行フォーミュラツールで新しい列を作成し、IDごとに数字を割り当てていきます。この例ではNumberという列を作成しています。
- 新しいフィールドを作成する
- Int32型
- 存在しない行の値: 0または空
- グループ化: ID
- 式: [Row-1:Number] + 1
フォーミュラツールを使って新しい列を2つ作成します。ここではKEY_FIELDとVALUE_FIELDとしています。KEYとVALUEの文字列と先ほど作成したNumberの列を"KEY" + ToString([Number])
のように組み合わせて、KEYとVALUEの列名を出力します。
この時点でデータは以下のようになっています。
クロスタブツールを2つ使い、KEYとVALUEそれぞれのデータを横持ちに変換します。
- 以下の値でデータをグループ化: ID
- 列ヘッダーの変更: KEY_FIELDまたはVALUE_FIELD
- 新しい列の値: KEYまたはVALUE
結合ツールを使って、2つのデータをIDで結合します。列の順番も修正します。
データが1つにまとまりました。
最後に、複数フィールドフォーミュラツールを使って空文字になっているデータをNullに変換します。
- Textフィールドを選択
- 式:
IIF(IsEmpty([_CurrentField_]), Null(), [_CurrentField_])
結果を確認して完成です。
最後に
Alteryxで複数のKEYがあるデータをIDごとに1行にまとめるワークフローをご紹介しました。